↳ Prolog
↳ PrologToPiTRSProof
perm1_in_ga([], []) → perm1_out_ga([], [])
perm1_in_ga(Xs, .(X, Ys)) → U1_ga(Xs, X, Ys, select_in_aga(X, Xs, Zs))
select_in_aga(X, .(X, Xs), Xs) → select_out_aga(X, .(X, Xs), Xs)
select_in_aga(X, .(Y, Xs), .(Y, Zs)) → U3_aga(X, Y, Xs, Zs, select_in_aga(X, Xs, Zs))
U3_aga(X, Y, Xs, Zs, select_out_aga(X, Xs, Zs)) → select_out_aga(X, .(Y, Xs), .(Y, Zs))
U1_ga(Xs, X, Ys, select_out_aga(X, Xs, Zs)) → U2_ga(Xs, X, Ys, perm1_in_ga(Zs, Ys))
U2_ga(Xs, X, Ys, perm1_out_ga(Zs, Ys)) → perm1_out_ga(Xs, .(X, Ys))
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
perm1_in_ga([], []) → perm1_out_ga([], [])
perm1_in_ga(Xs, .(X, Ys)) → U1_ga(Xs, X, Ys, select_in_aga(X, Xs, Zs))
select_in_aga(X, .(X, Xs), Xs) → select_out_aga(X, .(X, Xs), Xs)
select_in_aga(X, .(Y, Xs), .(Y, Zs)) → U3_aga(X, Y, Xs, Zs, select_in_aga(X, Xs, Zs))
U3_aga(X, Y, Xs, Zs, select_out_aga(X, Xs, Zs)) → select_out_aga(X, .(Y, Xs), .(Y, Zs))
U1_ga(Xs, X, Ys, select_out_aga(X, Xs, Zs)) → U2_ga(Xs, X, Ys, perm1_in_ga(Zs, Ys))
U2_ga(Xs, X, Ys, perm1_out_ga(Zs, Ys)) → perm1_out_ga(Xs, .(X, Ys))
PERM1_IN_GA(Xs, .(X, Ys)) → U1_GA(Xs, X, Ys, select_in_aga(X, Xs, Zs))
PERM1_IN_GA(Xs, .(X, Ys)) → SELECT_IN_AGA(X, Xs, Zs)
SELECT_IN_AGA(X, .(Y, Xs), .(Y, Zs)) → U3_AGA(X, Y, Xs, Zs, select_in_aga(X, Xs, Zs))
SELECT_IN_AGA(X, .(Y, Xs), .(Y, Zs)) → SELECT_IN_AGA(X, Xs, Zs)
U1_GA(Xs, X, Ys, select_out_aga(X, Xs, Zs)) → U2_GA(Xs, X, Ys, perm1_in_ga(Zs, Ys))
U1_GA(Xs, X, Ys, select_out_aga(X, Xs, Zs)) → PERM1_IN_GA(Zs, Ys)
perm1_in_ga([], []) → perm1_out_ga([], [])
perm1_in_ga(Xs, .(X, Ys)) → U1_ga(Xs, X, Ys, select_in_aga(X, Xs, Zs))
select_in_aga(X, .(X, Xs), Xs) → select_out_aga(X, .(X, Xs), Xs)
select_in_aga(X, .(Y, Xs), .(Y, Zs)) → U3_aga(X, Y, Xs, Zs, select_in_aga(X, Xs, Zs))
U3_aga(X, Y, Xs, Zs, select_out_aga(X, Xs, Zs)) → select_out_aga(X, .(Y, Xs), .(Y, Zs))
U1_ga(Xs, X, Ys, select_out_aga(X, Xs, Zs)) → U2_ga(Xs, X, Ys, perm1_in_ga(Zs, Ys))
U2_ga(Xs, X, Ys, perm1_out_ga(Zs, Ys)) → perm1_out_ga(Xs, .(X, Ys))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
PERM1_IN_GA(Xs, .(X, Ys)) → U1_GA(Xs, X, Ys, select_in_aga(X, Xs, Zs))
PERM1_IN_GA(Xs, .(X, Ys)) → SELECT_IN_AGA(X, Xs, Zs)
SELECT_IN_AGA(X, .(Y, Xs), .(Y, Zs)) → U3_AGA(X, Y, Xs, Zs, select_in_aga(X, Xs, Zs))
SELECT_IN_AGA(X, .(Y, Xs), .(Y, Zs)) → SELECT_IN_AGA(X, Xs, Zs)
U1_GA(Xs, X, Ys, select_out_aga(X, Xs, Zs)) → U2_GA(Xs, X, Ys, perm1_in_ga(Zs, Ys))
U1_GA(Xs, X, Ys, select_out_aga(X, Xs, Zs)) → PERM1_IN_GA(Zs, Ys)
perm1_in_ga([], []) → perm1_out_ga([], [])
perm1_in_ga(Xs, .(X, Ys)) → U1_ga(Xs, X, Ys, select_in_aga(X, Xs, Zs))
select_in_aga(X, .(X, Xs), Xs) → select_out_aga(X, .(X, Xs), Xs)
select_in_aga(X, .(Y, Xs), .(Y, Zs)) → U3_aga(X, Y, Xs, Zs, select_in_aga(X, Xs, Zs))
U3_aga(X, Y, Xs, Zs, select_out_aga(X, Xs, Zs)) → select_out_aga(X, .(Y, Xs), .(Y, Zs))
U1_ga(Xs, X, Ys, select_out_aga(X, Xs, Zs)) → U2_ga(Xs, X, Ys, perm1_in_ga(Zs, Ys))
U2_ga(Xs, X, Ys, perm1_out_ga(Zs, Ys)) → perm1_out_ga(Xs, .(X, Ys))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
SELECT_IN_AGA(X, .(Y, Xs), .(Y, Zs)) → SELECT_IN_AGA(X, Xs, Zs)
perm1_in_ga([], []) → perm1_out_ga([], [])
perm1_in_ga(Xs, .(X, Ys)) → U1_ga(Xs, X, Ys, select_in_aga(X, Xs, Zs))
select_in_aga(X, .(X, Xs), Xs) → select_out_aga(X, .(X, Xs), Xs)
select_in_aga(X, .(Y, Xs), .(Y, Zs)) → U3_aga(X, Y, Xs, Zs, select_in_aga(X, Xs, Zs))
U3_aga(X, Y, Xs, Zs, select_out_aga(X, Xs, Zs)) → select_out_aga(X, .(Y, Xs), .(Y, Zs))
U1_ga(Xs, X, Ys, select_out_aga(X, Xs, Zs)) → U2_ga(Xs, X, Ys, perm1_in_ga(Zs, Ys))
U2_ga(Xs, X, Ys, perm1_out_ga(Zs, Ys)) → perm1_out_ga(Xs, .(X, Ys))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
SELECT_IN_AGA(X, .(Y, Xs), .(Y, Zs)) → SELECT_IN_AGA(X, Xs, Zs)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
↳ PiDP
SELECT_IN_AGA(.(Y, Xs)) → SELECT_IN_AGA(Xs)
From the DPs we obtained the following set of size-change graphs:
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
U1_GA(Xs, X, Ys, select_out_aga(X, Xs, Zs)) → PERM1_IN_GA(Zs, Ys)
PERM1_IN_GA(Xs, .(X, Ys)) → U1_GA(Xs, X, Ys, select_in_aga(X, Xs, Zs))
perm1_in_ga([], []) → perm1_out_ga([], [])
perm1_in_ga(Xs, .(X, Ys)) → U1_ga(Xs, X, Ys, select_in_aga(X, Xs, Zs))
select_in_aga(X, .(X, Xs), Xs) → select_out_aga(X, .(X, Xs), Xs)
select_in_aga(X, .(Y, Xs), .(Y, Zs)) → U3_aga(X, Y, Xs, Zs, select_in_aga(X, Xs, Zs))
U3_aga(X, Y, Xs, Zs, select_out_aga(X, Xs, Zs)) → select_out_aga(X, .(Y, Xs), .(Y, Zs))
U1_ga(Xs, X, Ys, select_out_aga(X, Xs, Zs)) → U2_ga(Xs, X, Ys, perm1_in_ga(Zs, Ys))
U2_ga(Xs, X, Ys, perm1_out_ga(Zs, Ys)) → perm1_out_ga(Xs, .(X, Ys))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
U1_GA(Xs, X, Ys, select_out_aga(X, Xs, Zs)) → PERM1_IN_GA(Zs, Ys)
PERM1_IN_GA(Xs, .(X, Ys)) → U1_GA(Xs, X, Ys, select_in_aga(X, Xs, Zs))
select_in_aga(X, .(X, Xs), Xs) → select_out_aga(X, .(X, Xs), Xs)
select_in_aga(X, .(Y, Xs), .(Y, Zs)) → U3_aga(X, Y, Xs, Zs, select_in_aga(X, Xs, Zs))
U3_aga(X, Y, Xs, Zs, select_out_aga(X, Xs, Zs)) → select_out_aga(X, .(Y, Xs), .(Y, Zs))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
PERM1_IN_GA(Xs) → U1_GA(select_in_aga(Xs))
U1_GA(select_out_aga(X, Zs)) → PERM1_IN_GA(Zs)
select_in_aga(.(X, Xs)) → select_out_aga(X, Xs)
select_in_aga(.(Y, Xs)) → U3_aga(Y, select_in_aga(Xs))
U3_aga(Y, select_out_aga(X, Zs)) → select_out_aga(X, .(Y, Zs))
select_in_aga(x0)
U3_aga(x0, x1)
select_in_aga(.(X, Xs)) → select_out_aga(X, Xs)
POL(.(x1, x2)) = 1 + 2·x1 + x2
POL(PERM1_IN_GA(x1)) = x1
POL(U1_GA(x1)) = x1
POL(U3_aga(x1, x2)) = 1 + 2·x1 + x2
POL(select_in_aga(x1)) = x1
POL(select_out_aga(x1, x2)) = x1 + x2
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
↳ QDP
↳ RuleRemovalProof
U1_GA(select_out_aga(X, Zs)) → PERM1_IN_GA(Zs)
PERM1_IN_GA(Xs) → U1_GA(select_in_aga(Xs))
select_in_aga(.(Y, Xs)) → U3_aga(Y, select_in_aga(Xs))
U3_aga(Y, select_out_aga(X, Zs)) → select_out_aga(X, .(Y, Zs))
select_in_aga(x0)
U3_aga(x0, x1)
U1_GA(select_out_aga(X, Zs)) → PERM1_IN_GA(Zs)
POL(.(x1, x2)) = x1 + x2
POL(PERM1_IN_GA(x1)) = 2·x1
POL(U1_GA(x1)) = x1
POL(U3_aga(x1, x2)) = 2·x1 + x2
POL(select_in_aga(x1)) = 2·x1
POL(select_out_aga(x1, x2)) = 1 + x1 + 2·x2
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
↳ QDP
↳ RuleRemovalProof
↳ QDP
↳ DependencyGraphProof
PERM1_IN_GA(Xs) → U1_GA(select_in_aga(Xs))
select_in_aga(.(Y, Xs)) → U3_aga(Y, select_in_aga(Xs))
U3_aga(Y, select_out_aga(X, Zs)) → select_out_aga(X, .(Y, Zs))
select_in_aga(x0)
U3_aga(x0, x1)